{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Linear Dynamical Systems with MXNet\n",
    "\n",
    "In this notebook we will look at how to implement filtering in general linear dynamical systems (aka Kalman filtering) using MXNet.\n",
    "\n",
    "First, a short mathematical description of the problem. \n",
    "\n",
    "A general (Gaussian) linear dynamical system is specified by two equations. \n",
    "\n",
    "* The first, called the transition equation,\n",
    "\n",
    "$$h_{t} = Ah_{t-1} + \\epsilon_t \\quad \\quad \\quad \\epsilon_t \\sim \\mathcal{N}(0, \\Sigma_h)$$\n",
    "\n",
    "describes how the hidden (also called \"latent\") state $h_t \\in \\mathbb{R}^H$ evolves with time. In a LDS this involves applying a linear transformation $A \\in \\mathbb{R}^{H\\times H}$ to the previous hidden state $h_{t-1}$, followed by adding zero-mean Gaussian noise. \n",
    "\n",
    "* The second, the observation equation or emission model, \n",
    "\n",
    "$$v_{t} = Bh_t + \\nu_t \\quad \\quad \\quad \\nu_t \\sim \\mathcal{N}(0, \\Sigma_v)$$\n",
    "\n",
    "descibes how the latent state $h_t$ relates to the observations (\"visibles\") $v_t \\in \\mathbb{R}^D$. In particular, $v_t$ is a linear transformation of the hidden state, $Bh_t$, to which Gaussian noise is added.\n",
    "\n",
    "Finally, we need to specify the initial state, usually by placing a Gaussian prior on $h_0$, \n",
    "\n",
    "$$h_0 \\sim \\mathcal{N}(\\mu_0, \\Sigma_0)$$\n",
    "\n",
    "The LDS is thus fully specified by the system parameters \n",
    "$A \\in \\mathbb{R}^{H \\times H}$, $B \\in \\mathbb{R}^{D \\times H}$, $\\Sigma_h \\in \\mathcal{S}_{+}^H$, $\\Sigma_v \\in \\mathcal{S}_{+}^D$, $\\mu_0 \\in \\mathbb{R}^H$, $\\Sigma_0 \\in \\mathcal{S}_{+}^H$. $\\mathcal{S}_{+}$ denotes the space of positive definite (PD) matrices.\n",
    "\n",
    "Given such a LDS specification, and a sequence of observations $v_0, v_1, \\ldots, v_T$, one is typically interested in one of the following\n",
    "\n",
    "  1. (Log-)Likelihood computation, i.e. computing the probability of the data under the model, $P(v_0, v_1, \\ldots, v_T)$\n",
    "  2. Filtering, i.e. computing the mean and covariance of $P(h_t|v_0, v_1, \\ldots, v_t)$\n",
    "  3. Smoothing, i.e. computing the mean and covariance of $P(h_t|v_0, v_1, \\ldots, v_T)$\n",
    "  4. Parameter learning: find the system parameters that best describe the data, e.g. by maximizing likelihood\n",
    "  \n",
    "In this notebook we will focus on the filtering problem, and will also see how to compute the log-likelihood as a byproduct. For details on other problems, See e.g. [Barber, 2012](http://web4.cs.ucl.ac.uk/staff/D.Barber/textbook/020217.pdf), Chapter 24."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Filtering\n",
    "We want to find the \"filtered\" distributions $p(h_t|v_{0:t})$ where $v_{0:t}$ denotes $\\{v_0, \\cdots, v_t\\}.$ Due to the closure properties of Gaussian distributions, each of these distributions is also Gaussian $p(h_t|v_{0:t}) = \\mathcal{N}(h_t|f_t, F_T)$. The filtering procedure proceeds sequentially, by expressing $f_t$ and $F_t$ in terms of $f_{t-1}$ and $F_{t-1}$. We initialize $f_0$ and $F_0$ to be 0.\n",
    "\n",
    "## Prerequisite\n",
    "\n",
    "To derive the formulas for filtering, here is all you need [see Bishop 2008, Appendix B] \n",
    "\n",
    "* Conditional Gaussian equations\n",
    "\n",
    "    $$\n",
    "    \\begin{split}\n",
    "    p(x) &= \\mathcal{N}(\\mu, \\Lambda^{-1})\\\\\n",
    "    p(y|x) &= \\mathcal{N}(y|Ax + b, L^{-1})\n",
    "    \\end{split}\n",
    "    $$\n",
    "    \n",
    "    The marginal distribution of $y$ and the conditional distribution of $x$ given $y$ are\n",
    "    \n",
    "    $$\n",
    "    \\begin{split}\n",
    "    p(y) &= \\mathcal{N}(y|A\\mu + b, L^{-1} + A\\Lambda^{-1}A^T) &\\quad \\text{(1)} \\\\\n",
    "    p(x|y) &= \\mathcal{N}(x|\\Sigma\\left[A^TL(y-b) + \\Lambda\\mu\\right], \\Sigma), &\\quad \\Sigma = (\\Lambda + A^TLA)^{-1}\\quad \\text{(2)}\n",
    "    \\end{split}\n",
    "    $$\n",
    "    \n",
    "    \n",
    "* Matrix Inversion Lemma (aka [Woodbury matrix identity](https://en.wikipedia.org/wiki/Woodbury_matrix_identity))\n",
    "\n",
    " $$ (A + BD^{-1}C)^{-1} = A^{-1} - A^{-1}B(D + CA^{-1}B)^{-1}CA^{-1}\\quad \\text{(3)}$$\n",
    "\n",
    "\n",
    "## Derivation\n",
    "\n",
    "Now we are ready to derive the filtering equations, by Bayes Theorem\n",
    "\n",
    "$$\n",
    "\\begin{split}\n",
    "p(h_t|v_{0:t}) &= p(h_t|v_t, v_{0:t-1}) \\\\\n",
    "&\\propto p(v_t|h_t, v_{0:t-1}) p(h_t|v_{0:t-1}) \\\\\n",
    "&= p(v_t|h_t) p(h_t|v_{0:t-1})\\quad \\text{by Markov property}\n",
    "\\end{split}\n",
    "$$\n",
    "\n",
    "The derivation boils down to caclulate the two terms on the right hand side (you can think that the first is $p(y|x)$ and the second is $p(x)$ as in the conditional Gaussian equations) and use (2) above to get the desired formula. \n",
    "\n",
    "The first term is directly given by the observation equation, i.e., $p(v_t|h_t) = \\mathcal{N}(Bh_t, \\Sigma_v)$, and the second term can be calculated as follows\n",
    "\n",
    "$$\n",
    "\\begin{split}\n",
    "p(h_t|v_{0:t-1}) &= \\int p(h_t|h_{t-1}, v_{0:t-1})p(h_{t-1}|v_{0:t-1}){\\rm{d}}h_{t-1}\\\\\n",
    "&= \\int p(h_t|h_{t-1})p(h_{t-1}|v_{0:t-1}){\\rm{d}}h_{t-1}\\quad \\text{by Markov property}\\\\\n",
    "&= \\int \\mathcal{N}(h_t|Ah_{t-1}, \\Sigma_h)\\mathcal{N}(h_{t-1}|f_{t-1}, F_{t-1}){\\rm{d}}h_{t-1}\\\\\n",
    "&= \\mathcal{N}(Af_{t-1}, AF_{t-1}A^T + \\Sigma_h)\\quad \\text{using the marginalization equation (1)}\\\\\n",
    "&= \\mathcal{N}(\\mu_f, \\Sigma_{hh})\\\\\n",
    "\\end{split}\n",
    "$$\n",
    "\n",
    "First, we calculate the covariance matrix $F_t$, \n",
    "\n",
    "$$\n",
    "F_t = \\left(\\Sigma_{hh}^{-1} - B^T\\Sigma_v^{-1}B\\right)^{-1} = \\Sigma_{hh} - \\Sigma_{hh}B^T(\\Sigma_v + B\\Sigma_{hh}B^T)^{-1}B\\Sigma_{hh} = (I - KB)\\Sigma_{hh}, \n",
    "$$\n",
    "\n",
    "where we have used the matrix inversion lemman and define the **Kalman gain matrix** as\n",
    "\n",
    "$$K = \\Sigma_{hh}B^T(\\Sigma_v + B\\Sigma_{hh}B^T)^{-1}.$$ \n",
    "\n",
    "Notice that for numerical stability, the covariance matrix is normally calculated using so-called \"Joseph's symmetrized update,\"\n",
    "\n",
    "$$F_t = (I - K_tB)\\Sigma_{hh}(I-K_tB)^T +  K_t\\Sigma_vK_t^T,$$\n",
    "\n",
    "which consists of summing two PD matrices.\n",
    "\n",
    "\n",
    "Finally, after some algebraic manipulation, we have the mean \n",
    "\n",
    "$$ f_t = \\mu_{h} + K(v - B\\mu_{h}).$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## LDS Foward Pass\n",
    "\n",
    "To summarize, the iterative algorithm proceeds as follows\n",
    "\n",
    "$$\\mu_h = Af_{t-1} \\quad \\quad \\quad \\mu_v = B\\mu_h$$\n",
    "\n",
    "$$\\Sigma_{hh} = AF_{t-1}A^T + \\Sigma_h \\quad \\quad \\quad \\Sigma_{vv} = B\\Sigma_{hh}B^T + \\Sigma_v$$\n",
    "\n",
    "$$K_t = \\Sigma_{hh}B^T\\Sigma_{vv}^{-1}$$\n",
    "\n",
    "$$f_t = \\mu_h + K(v-\\mu_v) \\quad \\quad \\quad F_t = (I - K_tB)\\Sigma_{hh}(I-K_tB)^T +  K_t\\Sigma_vK_t^T$$\n",
    "\n",
    "As we can see, each step in the recursive filtering procedure involves a few matrix-matrix and matrix-vector multiplications, as well as some matrix and vector additions and subtractions. These are standard operators available is most deep learning frameworks (including MXNet, where matrix multiplication is available through `mx.sym.dot()`).\n",
    "However, the update also involves the term $\\Sigma_{vv}^{-1}$, the inverse of a $D$-by-$D$ symmetric, postive semidefinite matrix (due to it being a covariance matrix). If the output dimensionality $D$ is 1, this is simply the scalar $1/\\Sigma_{vv}$, but in the general case we need to compute the inverse (or, preferably, solve the corresponding linear system directly). \n",
    "\n",
    "Luckily, operators for doing exactly that have recently been added to MXNet. In particular, we have\n",
    "\n",
    "  * `mx.nd.linalg_gemm2` (Matrix-matrix product, more flexible than `dot`)\n",
    "  * `mx.nd.linalg_potrf` (Cholesky decomposition $A = LL^T$ for symmetric, PD matrix $A$)\n",
    "  * `mx.nd.linalg_trsm` (solve system of equations involving triangular matrices)\n",
    "  * `mx.nd.linalg_sumlogdiag` (compute the sum of the log of the diagonal elements of a matrix)\n",
    "  * `mx.nd.linalg_potri` (compute $A^{-1}$ from a previously computed Cholesky factor $L$ of $A$ (i.e. $LL^T = A$).\n",
    "  \n",
    "## Computing the likelihood\n",
    "The terms $\\mu_v$ and $\\Sigma_{vv}$ computed during the filtering update correspond to the mean and covariance of the predictive distribution $P(v_{t}|v_0, v_1, \\ldots, v_{t-1})$, which allows us to compute the likelihood by decomposing it into telescoping conditional distributions, \n",
    "\n",
    "$$P(v_0, v_1, \\ldots, v_t) = P(v_0)P(v_1|v_0)P(v_2|v_0, v_1)\\cdots P(v_t|v_0, v_1, \\ldots, v_{t-1})$$\n",
    "\n",
    "and then using $P(v_t|v_0, v_1, \\ldots, v_{t-1}) = \\mathcal{N}(v_t|\\mu_v, \\Sigma_{vv})$ with parameters obtained during filtering to compute each term."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import mxnet as mx\n",
    "\n",
    "from mxnet.ndarray import linalg_gemm as gemm\n",
    "from mxnet.ndarray import linalg_gemm2 as gemm2\n",
    "from mxnet.ndarray import linalg_potrf as potrf\n",
    "from mxnet.ndarray import linalg_trsm as trsm\n",
    "from mxnet.ndarray import linalg_sumlogdiag as sumlogdiag\n",
    "\n",
    "import mxnet.ndarray as nd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "plt.rcParams[\"figure.figsize\"] = (10, 5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Generating Synthetic Dataset\n",
    "\n",
    "This example is adapted from Example 24.3 in (Barber, 2017). The two-dimensional latent vector $h_t$ is rotated at each iteration and then is projected to produce a scalar observation. More precisely, we have\n",
    "\n",
    "$$\n",
    "h_{t+1} = Ah_{t} + \\epsilon_h, \\quad A = \\begin{pmatrix}\\cos\\theta & -\\sin\\theta\\\\\\sin\\theta & \\cos\\theta\\end{pmatrix}, \\epsilon_h \\sim \\mathcal{N}(0, \\alpha^2\\cdot\\mathbb{I}_2)\n",
    "$$\n",
    "\n",
    "$$\n",
    "v_{t+1} = [1, 0]\\cdot h_{t+1} + \\epsilon_v, \\quad , \\epsilon_v \\sim \\mathcal{N}(0, \\sigma^2).\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "alpha = 0.5\n",
    "sigma = 0.5\n",
    "theta = np.pi / 6\n",
    "T = 50"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "A = nd.array([[np.cos(theta), -np.sin(theta)],\n",
    "              [np.sin(theta), np.cos(theta)]])\n",
    "B = nd.array([[1, 0]])\n",
    "\n",
    "S_h = nd.array(np.square(alpha) * np.eye(2))\n",
    "S_v = nd.array(np.square(sigma) * np.eye(1))\n",
    "\n",
    "v = []\n",
    "# initial state h_0\n",
    "h = np.array([1, 0])\n",
    "for t in range(T):\n",
    "    # h_t = Bh_{t-1} + \\epsilon_h\n",
    "    h = np.random.multivariate_normal(A.asnumpy().dot(h), S_h.asnumpy())\n",
    "    \n",
    "    # v_t = Ah_t + \\epsilon_v\n",
    "    vv = np.random.normal(B.asnumpy().dot(h), S_v.asnumpy())\n",
    "    \n",
    "    v.append(vv)\n",
    "v = nd.array(np.array(v).reshape((T,1)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nRK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x107314d68>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(v.asnumpy());"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## LDS Forward Function (Filtering)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def LDS_forward(v, A, B, S_h, S_v):\n",
    "    \n",
    "    H = A.shape[0] # dim of latent state\n",
    "    D = B.shape[0] # dim of observation\n",
    "    T = v.shape[0] # num of observations\n",
    "    \n",
    "    f_0 = nd.zeros((H,1))\n",
    "    F_0 = nd.zeros((H,H))\n",
    "    \n",
    "    eye_h = nd.array(np.eye(H))    \n",
    "    \n",
    "    F_t = None\n",
    "    f_t = None\n",
    "    F_seq = []\n",
    "    f_seq = []\n",
    "    log_p_seq = []\n",
    "\n",
    "    for t in range(T):\n",
    "\n",
    "        if t == 0:\n",
    "            # At the first time step, use the prior\n",
    "            mu_h = f_0\n",
    "            S_hh = F_0\n",
    "        else:\n",
    "            # Otherwise compute using update eqns.\n",
    "            mu_h = gemm2(A, f_t)\n",
    "            S_hh = gemm2(A, gemm2(F_t, A, transpose_b=1)) + S_h\n",
    "\n",
    "        # direct transcription of the update equations above\n",
    "        mu_v = gemm2(B, mu_h)\n",
    "        S_hh_x_B_t = gemm2(S_hh, B, transpose_b=1)\n",
    "        S_vv = gemm2(B, S_hh_x_B_t) + S_v\n",
    "        S_vh = gemm2(B, S_hh)\n",
    "\n",
    "        # use potrf to compute the Cholesky decomposition S_vv = LL^T\n",
    "        S_vv_chol = potrf(S_vv)\n",
    "\n",
    "        # K = S_hh X with X = B^T S_vv^{-1}\n",
    "        # We have X = B^T S_vv^{-1} => X S_vv = B^T => X LL^T = B^T\n",
    "        # We can thus obtain X by solving two linear systems involving L\n",
    "        K = trsm(S_vv_chol, trsm(S_vv_chol, S_hh_x_B_t, rightside=1, transpose=1), rightside=1)\n",
    "\n",
    "        delta = v[t] - mu_v\n",
    "        f_t = mu_h + gemm2(K, delta)\n",
    "\n",
    "        ImKB = eye_h - gemm2(K, B)\n",
    "        F_t = (gemm2(ImKB, gemm2(S_hh, ImKB, transpose_b=True)) \n",
    "                       + gemm2(K, gemm2(S_v, K, transpose_b=True), name=\"Ft\"))\n",
    "\n",
    "        # save filtered covariance and mean\n",
    "        F_seq.append(F_t)\n",
    "        f_seq.append(f_t)\n",
    "        \n",
    "        # compute the likelihood using mu_v and L (LL^T = S_vv)\n",
    "        Z = trsm(S_vv_chol, trsm(S_vv_chol, delta), transpose=1)\n",
    "        log_p = (-0.5 * (mx.nd.reshape(gemm2(delta, Z, transpose_a=True), shape=(0,), name=\"reshaped\") \n",
    "                         + D*np.log(2.0 * np.pi)) - sumlogdiag(S_vv_chol))\n",
    "        log_p_seq.append(log_p)\n",
    "        \n",
    "    \n",
    "    return f_seq, F_seq, log_p_seq"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "f_seq, F_seq, _ = LDS_forward(v, A, B, S_h, S_v)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Calculate the filtered mean and variance \n",
    "\n",
    "\n",
    "Given $p(h_t|v_{0:t})=\\mathcal{N}(\\mu_t, \\Sigma_t)$, we can compute the distribution of the reconstructed observations \n",
    "\n",
    "$$\n",
    "p(\\widehat{v_t}) = \\mathcal{N}(B\\mu_t, B\\Sigma_tB^T + \\sigma^2).\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from functools import reduce\n",
    "B_np = B.asnumpy()\n",
    "h_states = reduce(lambda x, y: np.hstack((x,y)), [ff.asnumpy() for ff in f_seq])\n",
    "v_filtered_mean = B.asnumpy().dot(h_states).reshape((T,))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "v_filtered_var = np.sqrt(\n",
    "    np.array([B_np.dot(ff.asnumpy()).dot(B_np.T) + np.square(sigma) for ff in F_seq]).reshape((T,)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nEEHg/wMpTn+6SExLgQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x107683048>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(v.asnumpy(), color=\"r\")\n",
    "plt.plot(v_filtered_mean, color=\"b\")\n",
    "x = np.arange(T)\n",
    "plt.fill_between(x, v_filtered_mean-v_filtered_var, \n",
    "                 v_filtered_mean+v_filtered_var, \n",
    "                 facecolor=\"blue\", alpha=0.2)\n",
    "plt.legend([\"data\", \"reconstruction\"]);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the next notebook, we will use Kalman filtering as a subroutine in more complex models. In particular, we will show how to do time series forecasting with innovative state space models (ISSMs). "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
